汇编指令中的查表指令"DB"使用相关问题

来源:百度知道 编辑:UC知道 时间:2024/05/03 11:11:22
TABLE: ;七段显示器数据定义
DB 0C0H, 0F9H, 0A4H, 0B0H, 99H ; 01234
DB 92H, 82H, 0F8H, 80H, 90H ; 56789
DB 88H, 83H, 0C6H, 0A1H, 86H ; ABCDE
为什么上面的表格每行有5个数据,而且有3行呢?
用查表指令 MOV DPTR,#TABLE
MOVC A,@A+DPTR 进行查表时数据是怎么样传送的呢?

我用c语言给你解释:
char table〔〕={"fdgetrgfdgfdg"};
char *p;
char a;
MOV DPTR,#TABLE
p=table;//指针p指向数据表 DPTR指向数据表 TABLE

MOVC A,@A+DPTR
a= *(p+a);

如果以 表格的行与列访问,则 a= 行*行_size + 列;
char table〔行_size 〕〔列〕={"fdgetrgfdgfdg",“4354346”,“34646”};

这只是为了书写方便,实际上和写在一行上是一样的
如TABLE: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H 92H, 82H, 0F8H, 80H, 90H 88H, 83H, 0C6H, 0A1H, 86H ;88应接在第一行后面,版面不够

这样写和刚才是一样的

MOV DPTR,#TABLE ;将表首地址传送给DPTR
MOVC A,@A+DPTR ;A是位移量,也就是相对地址,表示要取第几个数,+上首地址就是实际地址了,@取出值后送给寄存器A